<?php
include_once BXD_INCLUDEPATH . 'lib/database/Database.php';

/**
 * Classe Singleton utilizzata per inizializzare e tenere in memoria una o più istanza
 * della classe Database. Ognuna di essere viene creata (se non ancora esistente) e
 * restituita attraverso il metodo "getConnection"
 *
 * @author Fabrizio Filieri
 * @version 1.0
 * @category lib/database
 *
 * @property Database $ret
 */
class DBFactory
{
	/**
	 * @var DBFactory Istanza della classe
	 */
	private static $instance = null;

	/**
	 * @var array Lista delle istanze per la connessione a uno o più DATABASE
	 */
	private $connections;

	/**
	 * Inizializzazione della variabile $connections
	 */

	private function __construct()
	{
		$this->connections = array();
	}

	/**
	 * Metodo statico utilizzato per restituire l'istanza della classe Database
	 *
	 * @return Database Oggetto database su cui operare
	 */

	public static function getConnection($name="DBDefault")
	{
		// creazione istanza se non attiva
		if (self::$instance == null)
			self::$instance = new DBFactory();

		$instance = self::$instance;

		// caricamento file di configurazione
		$fileconf = BXD_INCLUDEPATH_SITE . "conf/" . $name . ".db.php";

		if (file_exists($fileconf))
		{
			if (!isset($instance->connections[$name])) // non esiste ancora la connessione richiesta..
			{
				include_once($fileconf);
				include_once BXD_INCLUDEPATH . 'lib/database/' . $name::$class . '.php';

				$instance->connections[$name] = new $name::$class();
				$instance->connections[$name]->connect($name);
			}

			return $instance->connections[$name];
		}
		else
		{
			throw new Exception("File db connection config not found. Connection: " . $name);
		}
	}
}
?>